package com.lu.model.entity;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.extension.activerecord.Model;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.lu.model.enums.ApprovalStatusEnum;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.Getter;

import java.io.Serializable;
import java.time.LocalDateTime;

/**
 * <p>
 * 门店
 * </p>
 *
 * @author currentCodeAuthor
 * @since 2022-07-31
 */
@Data
@EqualsAndHashCode(callSuper = false)
public class SysStore extends Model<SysStore> {

    private static final long serialVersionUID = 1L;

    /**
     * 门店
     */
    @TableId(value = "id", type = IdType.AUTO)
    private Long id;

    /**
     * 经营模式(1线下 2电子券)
     * @see BusinessMode
     */
    private Integer businessMode;

    /**
     * 门店名称
     */
    private String name;

    /**
     * 关联id (经营模式是1关联商品 经营模式是2关联品牌 空则不关联)
     */
    private Long relationId;

    /**
     * 用户id(系统登录账户)
     */
    private Long userId;

    /**
     * 联系人姓名
     */
    private String contactsName;

    /**
     * 联系人电话
     */
    private String contactsPhone;

    /**
     * 营业开始时间
     */
    private LocalDateTime businessHoursStart;

    /**
     * 营业结束时间
     */
    private LocalDateTime businessHoursEnd;

    /**
     * 状态 (0未审核 1审核中 2审核不通过 3审核通过 4禁用 5启用)
     * @see ApprovalStatusEnum
     */
    private Integer status;

    /**
     * 客户端隐藏（0不隐藏 1隐藏）
     * @see com.lu.model.enums.YesOrNoEnum
     */
    private Integer hidden;

    /**
     * 排序
     */
    private Integer sort;

    /**
     * 省
     */
    private String province;

    /**
     * 市
     */
    private String city;

    /**
     * 区
     */
    private String region;

    /**
     * 详细地址
     */
    private String address;

    /**
     * 省市区Code
     */
    private String addressCode;

    /**
     * 经度
     */
    private String longitude;

    /**
     * 纬度
     */
    private String latitude;

    /**
     * 可以消费的卡类型(多个逗号分隔)
     */
    private String applyCardCategoryIds;

    /**
     * 创建人
     */
    private Long createUserId;

    /**
     * 创建时间
     */
    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private LocalDateTime createTime;

    /**
     * 更新人
     */
    private Long updateUserId;

    /**
     * 更新时间
     */
    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private LocalDateTime updateTime;


    @Override
    protected Serializable pkVal() {
        return this.id;
    }

    @Getter
    @AllArgsConstructor
    public enum BusinessMode {

        OFFLINE(1, "线下兑换"),
        ELECTRONIC_COUPON(2, "电子券")

        ;

        private Integer mode;
        private String description;

    }

    @TableField(exist = false)
    private String username;

}
